// 栈类 ES5写法
function Stack() {
  // 栈中的属性
  this.items = [];
  // 栈相关的方法
  // 压栈操作
  this.push = function (element) {
    this.items.push(element);
  };
  // 出栈操作
  this.pop = function () {
    return this.items.pop();
  };
  // peek操作
  this.peek = function () {
    return this.items[this.items.length - 1];
  };
  // 判断栈中的元素是否为空
  this.isEmpty = function () {
    return this.items.length == 0;
  };
  // 获取栈中元素的个数
  this.size = function () {
    return this.items.length;
  };
}

// 下面是ES6 class语法写的
class StackClass {
  constructor() {
    this.item = [];
  }
  push(val) {
    this.item.push(val);
  }
  pop() {
    this.item.pop();
  }
  peek() {
    return this.item[this.item.length - 1];
  }
  size() {
    return this.item.length;
  }
  isEmpty() {
    return this.item.length === 0;
  }
  values() {
    return this.item.toString();
  }
}

// ES6 class写法
let demo = new StackClass();
// ES5 function写法
// let demo = new Stack();

// 元素入栈 1,3
demo.push(1);
demo.push(3);
demo.push(5);
// 输出栈的长度
console.log("当前栈中元素个数 -", demo.size());
console.log("---------------------");
// 元素出栈
demo.pop();
// 输出栈的长度
console.log("出栈一次后当前栈中元素个数 -", demo.size());
// 当前栈顶的元素
console.log("当前栈顶元素是 -", demo.peek());
// 判断栈中的元素是否为空
console.log("栈中的元素是否为空 -", demo.isEmpty());
